package test00.lx10;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.stream.Stream;

/**
 * @author ZQX
 * @date 2025-04-09
 */
public class MainTest {
    public static void main(String[] args) {
        // 第一：定义数据源
        Class<UserService> clazz = UserService.class;
        Method[] methods = clazz.getDeclaredMethods();

        // 第二：实例化流对象
        Stream<Method> stream = Arrays.stream(methods);


        // 第三：操作
        stream
                // 过滤具有 ExceptionHandler 注解的方法
                .filter(m -> m.isAnnotationPresent(ExceptionHandler.class))
                // 根据异常类的继承关系进行排序 - isAssignableFrom
                .sorted((m1, m2) -> {
                    // 获取方法上面注解的值 - 异常类的 Class 对象
                    Class<?> m1Value = m1
                            .getAnnotation(ExceptionHandler.class)
                            .value();

                    Class<?> m2Value = m2
                            .getAnnotation(ExceptionHandler.class)
                            .value();

                    // 判断
                    if (m1Value == m2Value) {
                        return 0;
                    }

                    return m1Value.isAssignableFrom(m2Value) ? 1 : -1;
                })
                .map(Method::getName)
                .forEach(System.out::println);
    }
}
